package com.ddwl.user.controller;


import com.ddwl.common.annotation.Auth;
import com.ddwl.common.constant.BaseEnum;
import com.ddwl.common.controller.BaseController;
import com.ddwl.schema.bo.user.EditUserAddrBo;
import com.ddwl.schema.vo.base.RestVo;
import com.ddwl.schema.vo.user.UserAddrVo;
import com.ddwl.user.service.UserAddrService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List;

/**
 * @author Fu Zhaohui
 */
@Auth(product = {BaseEnum.ProductEnum.FENXIAO,BaseEnum.ProductEnum.ZHENYU, BaseEnum.ProductEnum.CLOTHES, BaseEnum.ProductEnum.MALL, BaseEnum.ProductEnum.WBM, BaseEnum.ProductEnum.WBM_OFFICE, BaseEnum.ProductEnum.BYTE_DANCE})
@Api(tags = "用户地址服务")
@RequestMapping("/address")
@RestController
public class AddressController extends BaseController {


    @Resource
    private UserAddrService userAddrService;

    @PostMapping
    @ApiOperation("我的地址列表")
    @Auth(product = {BaseEnum.ProductEnum.MALL, BaseEnum.ProductEnum.FENXIAO, BaseEnum.ProductEnum.WBM, BaseEnum.ProductEnum.WBM_OFFICE, BaseEnum.ProductEnum.BYTE_DANCE})
    public RestVo<List<UserAddrVo>> page() {
        return RestVo.ok(userAddrService.getList(getUserId()));
    }

    @PostMapping("/save")
    @ApiOperation("保存地址")
    @Auth(product = {BaseEnum.ProductEnum.MALL, BaseEnum.ProductEnum.FENXIAO, BaseEnum.ProductEnum.WBM, BaseEnum.ProductEnum.WBM_OFFICE, BaseEnum.ProductEnum.BYTE_DANCE})
    public RestVo save(@Valid @RequestBody EditUserAddrBo bo) {
        bo.setUserId(getUserId());
        userAddrService.save(bo);
        return RestVo.ok();
    }

    @GetMapping("/detail")
    @ApiOperation("获取地址")
    @Auth(product = {BaseEnum.ProductEnum.API, BaseEnum.ProductEnum.MALL,BaseEnum.ProductEnum.FENXIAO, BaseEnum.ProductEnum.WBM, BaseEnum.ProductEnum.WBM_OFFICE, BaseEnum.ProductEnum.BYTE_DANCE})
    public RestVo<UserAddrVo> detail(@RequestParam String id) {
        return RestVo.ok(userAddrService.getById(id));
    }

    @DeleteMapping("/delete")
    @ApiOperation("删除地址")
    @Auth(product = {BaseEnum.ProductEnum.API, BaseEnum.ProductEnum.MALL,BaseEnum.ProductEnum.FENXIAO, BaseEnum.ProductEnum.WBM, BaseEnum.ProductEnum.WBM_OFFICE, BaseEnum.ProductEnum.BYTE_DANCE})
    public RestVo delete(@ApiParam("地址ID") @RequestParam String id) {
        userAddrService.delete(id);
        return RestVo.ok();
    }

    @PostMapping("/default")
    @ApiOperation("设置默认地址")
    @Auth(product = {BaseEnum.ProductEnum.MALL, BaseEnum.ProductEnum.FENXIAO, BaseEnum.ProductEnum.WBM, BaseEnum.ProductEnum.WBM_OFFICE, BaseEnum.ProductEnum.BYTE_DANCE})
    public RestVo setDefault(@ApiParam("地址ID") @RequestParam String id) {
        userAddrService.setDefault(getUserId(), id);
        return RestVo.ok();
    }

    @GetMapping("/default")
    @ApiOperation("获取默认地址")
    @Auth(product = {BaseEnum.ProductEnum.MALL, BaseEnum.ProductEnum.FENXIAO, BaseEnum.ProductEnum.WBM, BaseEnum.ProductEnum.WBM_OFFICE, BaseEnum.ProductEnum.BYTE_DANCE})
    public RestVo getDefault() {
        return RestVo.ok(userAddrService.getDefault(getUserId()));
    }


}
